home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / edit / tde40.zip / tde.doc < prev    next >
Text File  |  1994-06-05  |  77KB  |  1,690 lines

  1.  
  2.                      TDE, the Thomson-Davis Editor
  3.                               Version 4.0
  4.                               June 5, 1994
  5.                               Frank Davis
  6.  
  7.  
  8. Description:
  9.  
  10.   TDE is a simple, public domain, multi-file/multi-window binary and text
  11.   file editor written for IBM PCs and close compatibles running either
  12.   MSDOS or Linux.  TDE is suitable for editing batch files, binary files,
  13.   text files, and various computer language source code files.  The only
  14.   limit on the number and size of files that TDE can handle is the amount
  15.   of conventional memory.  Likewise, the only limit on the number of windows
  16.   is the amount of conventional memory.  There is no preset maximum number
  17.   of files or windows that may be open at any one time.
  18.  
  19.  
  20. Introduction:
  21.  
  22.   I work with data files, computer source code, and various text files quite
  23.   a bit.  Most of the features in TDE are related, in some way, to handling
  24.   those types of files.  The various window and cursor commands in TDE are
  25.   really nice for comparing and editing source code or output files.  A
  26.   good collection of block commands is available for use on source code
  27.   and formatted data files.  For what little word processing I do, TDE has
  28.   a few simple commands for formatting text and paragraphs.  In short, TDE
  29.   contains most of the features that I use most of the time in an easy to
  30.   use, easy to remember, and easy to configure editor.  I hope you find
  31.   TDE as easy to use for most of your routine editing as me.
  32.  
  33.  
  34. Usage:
  35.  
  36.   At the command line type:
  37.  
  38.         tde [ [-f search_pattern] file name(s)]
  39.  
  40.         tde [ [-g regular_expression] file name(s)]
  41.  
  42.         tde [ [-b] file name]
  43.  
  44.         tde [ [+num] file name]
  45.  
  46.   For example:
  47.  
  48.         tde
  49.         tde foo.bar
  50.         tde c:\c70\TDE\main.c
  51.         tde *.c  \qc25\TDE\*.h
  52.         tde foo.bar  foobar  f*  foo.*  f??b??
  53.  
  54.       * * *  to search files for a pattern or reg ex and load matches  * * *
  55.  
  56.         tde  -f  find_me_load_me  foo.*
  57.         tde  -f  find_me_load_me  foo.*  *.bar
  58.  
  59.         tde  -g  "this|that"      foo.*      <=== finds "this" or "that"
  60.         tde  -g  [a-zA-Z0-9_]+\(  foo.bar    <=== finds C functions
  61.  
  62.         Note: If the '|' symbol is needed in a regular expression on
  63.               the command line, the search string needs to be enclosed
  64.               in quotes, or the MSDOS command interpreter will interpret '|'
  65.               as the pipe operator rather than the 'or' symbol.
  66.  
  67. enhanced ==>  * * * to edit binary files * * *
  68.  
  69.         tde -b tde.exe
  70.         tde -b80 tde.exe
  71.  
  72. new ==>   * * * for Linux/UNIX mail readers * * *
  73.  
  74.         tde +10 my_mail
  75.  
  76.  
  77.   If you don't enter a file name on the command line, TDE will prompt you
  78.   for a file name.  If the file does not exist, TDE starts out with an
  79.   empty file with the file name you just entered.  Or, pressing <Enter>
  80.   twice will pop-up a directory list.
  81.  
  82.  
  83. What's new:
  84.  
  85.                       New features in TDE 4.0 include:
  86.  
  87.                    Fixed problems in initial Linux port
  88.                    "+" command line option
  89.                    TDE remembers the -b command line option
  90.                    Linux 1.0 INFO-SHEET
  91.                    TDE to Linux port notes
  92.                    Config file for Linux
  93.                    25, 43, 50 line mode in DOS
  94.  
  95.  
  96.   TDE 4.0 works much better in the Linux environment.  A number of bugs
  97.   and problems were fixed in the initial port to Linux.  The common
  98.   wisdom is:  don't purchase the first version or the first port of any
  99.   software.  If anyone is interested, I have included a file of notes
  100.   that may be useful to others who may want to write or port to Linux.
  101.  
  102.   Incidentally, although I am hardly the person to conduct a well thought-
  103.   out comparison or review of UNIX workstations, I did have the use of
  104.   a popular low-end UNIX workstation for several weeks.  Side-by-side,
  105.   on my desk, I compared a VLB 8M RAM 486/66 PC with a 16M RAM low-end
  106.   UNIX workstation.  The 486/66 PC running Linux 1.0 was very impressive.
  107.   For those interested in playing around with UNIX, a PC with Linux is
  108.   a nice option and it can do real work.  With boot managers or boot
  109.   floppies, PCs are not locked into running only one OS.  For instance,
  110.   my PC has DOS/Windows + Novell, OS/2 2.1, and Linux.  No worries about
  111.   incompatibility or *slow* software emulators -- I just boot whichever
  112.   operating system best runs a particular application.
  113.  
  114.   The "+num" command line option was added for Linux mail readers.  Actually,
  115.   I don't use Linux mail readers, but some may find this option useful.
  116.   "+num" jumps to a line when a file is loaded into TDE.  The "+num"
  117.   is useful for skipping mail headers.
  118.  
  119.   The "-b" command line option originally loaded one file in binary mode.
  120.   Some users want to split the screen and load several files in binary
  121.   mode.  TDE now prompts users for binary mode when loading additional
  122.   files.  TDE is not really a good sector editor, but it is useful for
  123.   editing direct access (aka relative or random access) files:  the line
  124.   length can be adjusted to the size of the record length.
  125.  
  126.   The config file read option was written mainly for the Linux environment.
  127.   It can be used in the DOS environment, but it takes up a lot of room and
  128.   it duplicates the function of the config utility.  The config file read
  129.   option was intentially left out of TDE for DOS.  In Linux, TDE looks for
  130.   ".tdecfg" in 1) current working directory, then 2) user's HOME directory.
  131.   Each user in Linux may customize the key assignments and color fields
  132.   with the ".tdecfg" file.  Read the ".tdecfg" at any time in Linux by
  133.   choosing the "Read Config" option from the pop-down menu.  Press
  134.   Control-\ to access the pop-down menu.  Thanks to
  135.   <intruder@link.hacktic.nl> for the idea and the sample code.  TDE in
  136.   the Linux environment might look something like this:
  137.  
  138.  
  139.         /usr/bin   or  /usr/local/bin      <====  tde executable
  140.  
  141.         /home/user1                        <====  .tdecfg
  142.         /home/user2                        <====  .tdecfg
  143.           etc....                          <====  .tdecfg
  144.  
  145.  
  146.   TDE now takes advantage of 43 and 50 line VGA modes in DOS.  I think
  147.   TDE worked OK in these modes in Linux.  Thanks to Liang (Bill) Chen
  148.   <billyc@rsainc.com> for the original code and to Jim Derr
  149.   <jim.derr@spacebbs.com> for additional code and comments.
  150.  
  151.   I still haven't got Print Block or signals working in Linux...
  152.   I haven't written a UNIX style man page, either...
  153.   I don't have no mono system or mono terminal to test for Linux, too...
  154.   Entering file patterns to directory prompts in Linux don't work, also...
  155.  
  156.  
  157.  
  158.                          TDE 3.2a corrections
  159.  
  160.   Oops, I linked the wrong source code with the 3.2 config utility.  The
  161.   3.2 config utility has the same nasty bug that I fixed in 3.1.
  162.  
  163.   One of my UNIX friends pointed out a symptom of my MS-DOS programmer's
  164.   disease:  using '/' to introduce command line options.  In UNIX,
  165.   the '/' character is a path name character and is similar to '\' in MS-DOS.
  166.   Unless TDE were compiled in Linux, this problem would not show-up.
  167.  
  168.  
  169.                       New features in TDE 3.2 include:
  170.  
  171.         Pop-up pull-down command menu   =  Control \
  172.         More Language support, thanks to Byrial Jensen, byrial@daimi.aau.dk
  173.         Ported TDE to Linux (POSIX, SVR4, BSD4.3+?, FIPS 151-1, etc...)
  174.         Fixed a stupid mistake in the 3.1 config utility.
  175.  
  176.  
  177.   Even though I wrote TDE, I can't remember what half the function keys do.
  178.   The new simple pop-up pull-down command menu is handy for running commands
  179.   that are seldom used.  Also, dumb UNIX terminals don't have a lot of extra
  180.   function and cursor control keys.  The pop-up pull-down command menu is
  181.   really handy on dumb UNIX terminals.  Press Ctrl \ to access most of the
  182.   commands in TDE.  The only keys that really need to be remembered are the
  183.   mark line, box, and stream blocks keys.  Incidentally, when I added the
  184.   auto-CRLF/LF detect in TDE 2.2, seemlessly editing either DOS or UNIX
  185.   files was the intended goal.  The auto-CRLF/LF detect and the CRLF/LF
  186.   toggle is very convenient for working on text files in either DOS or UNIX.
  187.  
  188.   Byrial Jensen <byrial@daimi.aau.dk> contributed several functions that are
  189.   useful with non-English languages.  DOS filenames can contain extended
  190.   ASCII characters.  Now, the dirlist function in TDE sorts filenames
  191.   according to the sort order array, which can be customized to your favorite
  192.   alphabet.  Other things were changed for more easier non-English language
  193.   support: predefined regular expression macros may be redefined, I think
  194.   all editor prompts were gathered into prompts.h, response letters were
  195.   gathered into letters.h, and the window letters can be changed to follow a
  196.   non-English alphabet.  Byrial contributed two new functions that look at
  197.   the Caps Lock key.  Here's Byrial's description:
  198.  
  199.      2 new editor functions in TDE:
  200.  
  201.      IfCapsLock:
  202.  
  203.      When NOT playing back a macro, this function does absolutely nothing.
  204.      If executed from a macro, the next key recorded in the macro will only
  205.      be executed if Caps Lock is active, and else be dropped.
  206.      The function is mapped to key combination Ctrl-grey /
  207.  
  208.      IfNotCapsLock:
  209.  
  210.      When NOT playing back a macro, this function does absolutely nothing.
  211.      If executed from a macro, the next key recorded in the macro will only
  212.      be executed if Caps Lock is NOT active, and else be dropped.
  213.      The function is mapped to key combination Ctrl-grey *
  214.  
  215.      These functions are useful when assigning macroes for non-english letters
  216.      to ALT-letter and ALT-SHIFT-letter key pairs. E.g. one could define:
  217.         To ALT-G:       IfCapsLock C-circumflex IfNotCapsLock c-circumflex
  218.         To SHIFT-ALT-G: IfCapsLock c-circumflex IfNotCapsLock C-circumflex
  219.      if one use a character set with c-circumflex in both cases.
  220.  
  221.  
  222.  
  223.  
  224.                       New features in TDE 3.1 include:
  225.  
  226.  
  227.                   FindRegX meta characters:
  228.                       <     = Empty string at beginning of word
  229.                       >     = Empty string at end of word
  230.  
  231.  
  232.   I use the regular expression search much more often than I first
  233.   anticipated.  A couple of features missing in the original implementa-
  234.   tion are the beginning of word and end of word metacharacters.  These
  235.   metacharacters really come in handy for culling prefixes and suffixes
  236.   from the search.  Here's our new reg ex table:
  237.  
  238.  
  239.                    Regular Expression operator precedence:
  240.                    (based on the table in Dr. Aho's book)
  241.  
  242.           ┌──────────────────────────────────────────────────────┐
  243.           │   c = char    x = string    r,s = regular expression │
  244.           ├─────────┬──────────────────────────────┬─────────────┤
  245.           │  c      │  any non-operator character  │  Felis      │
  246.           │  \c     │  c literally and C escapes   │  catus\.    │
  247.           │  \:c    │  predefined macro:           │  \:c*(ie|ei)│
  248.           │         │     \:a  - alphanumeric      │             │
  249.           │         │     \:b  - white space       │             │
  250.           │         │     \:c  - alphabetic        │             │
  251.           │         │     \:d  - decimal           │             │
  252.           │         │     \:h  - hex               │             │
  253.           │         │     \:l  - lower alpha       │             │
  254.           │         │     \:u  - upper alpha       │             │
  255.           │  .      │  any character but newline   │  c.t        │
  256.           │  <      │  beginning of word           │  <cat       │
  257.           │  >      │  end of word                 │  <cat>      │
  258.           │  ^      │  beginning of line           │  ^cat>      │
  259.           │  $      │  end of line                 │  cat$       │
  260.           │  [x]    │  any character in x          │  [a-z0-9]   │
  261.           │  [^x]   │  any character not in x      │  [^AEIOU]   │
  262.           │  r*     │  zero or more r's            │  ca*t       │
  263.           │  r+     │  one or more r's             │  ca[b-t]+   │
  264.           │  r?     │  zero or one r               │  c.?t       │
  265.           │  rs     │  r followed by s             │  ^$         │
  266.           │  r|s    │  either r or s               │  kitty|cat  │
  267.           │  (r)    │  r                           │  (c)?(a+)t  │
  268.           └─────────┴──────────────────────────────┴─────────────┘
  269.  
  270.  
  271.  
  272.  
  273.                       New features in TDE 3.0 include:
  274.  
  275.                   FindRegX                 = #F7
  276.                   RepeatFindRegX           = F7
  277.                   RepeatFindRegXBackward   = @F7
  278.                   DefineRegXGrep           = ^F12
  279.                   Renamed the SearchAndSeize functions to Grep
  280.  
  281.  
  282.   The main feature in this version of TDE is a regular expression search
  283.   function.  I don't need regular expressions very often, but they do come
  284.   in handy.  For instance, our mainframe has a "compare" and a "compair"
  285.   function.  After years of using those functions, I have forgotten which
  286.   is the correct spelling.  With a regular expression function, I can
  287.   search for "comp(are|air)".  The '|' symbol, which is the or operator,
  288.   is very useful for finding several different or similar patterns at once.
  289.   Recently, I needed to delete all blank lines in a data file.  With a simple
  290.   macro, a regular expression search really simplified the job.
  291.  
  292.   Unfortunately, the regular expression search function can be very slow --
  293.   the worst case is really bad.  Searching for .*abc can take several minutes
  294.   in a small file (on a 486/33).  Press Control-Break to break-out of a long
  295.   running reg ex find.  In all actuallity, I never need to search for worst
  296.   case patterns.
  297.  
  298.  
  299.           Here's the macro I used to delete all blank lines in a file:
  300.  
  301.         Shift-F7  = FindRegX  (find a blank line before recording the macro)
  302.                     ^$
  303.  
  304.         Alt-F3    = turn macro record on
  305.         Alt-5     = assign macro to Alt-5
  306.         F7        = RepeatFindRegX - next blank line
  307.         Alt-D     = delete line
  308.         Up        = move cursor up a line (just in case current line is blank)
  309.         Alt-5     = call the macro we just recorded
  310.         Alt-F3    = turn macro record off
  311.  
  312.         Press Alt-5 to delete all blank lines.
  313.  
  314.  
  315.   The SearchAndSeize function was renamed to Grep.  I didn't want to call
  316.   the old function Grep, because that implies the ability to search for
  317.   regular expressions.  Now, there is a choice between a very fast, but
  318.   limited, DefineGrep or a slow, but very flexible, DefineRegXGrep for
  319.   grepping around.
  320.  
  321.  
  322.   TDE only checks for valid syntax in a regular expression, which basically
  323.   means that parens and brackets are balanced and that consecutive operators
  324.   '*', '+', '?', and '|' are not allowed.  For example, either ^$ or $^ will
  325.   find blank lines.  TDE does not check for regular expressions that create
  326.   null loops in the pattern matching machine.  If TDE can compile a regular
  327.   expression, TDE will try to find it.  Here are some examples of good and
  328.   bad regular expressions in TDE:
  329.  
  330.             will find (good):             chokes on null loops (bad):
  331.  
  332.                 (a|b)*                            (a*|b)*
  333.                 a*(ba*)*                          (a*b*)*
  334.                 (a*b)*                            (a*b*)+
  335.                 (a+)*                             (a*)+
  336.                 a*|b                              (a?)*
  337.  
  338.   TDE will correctly compile all of the above regular expressions, but it
  339.   just can't find the "bad" regular expressions.  If TDE does choke on
  340.   null loops, a harmless "nfa choked" message is displayed in the status bar
  341.   at the bottom of the screen.  TDE never tries to predict whether a given
  342.   regular expression will produce null loops.
  343.  
  344.   Null loops are created when a regular expression has zero or more occur-
  345.   rences of zero or more occurrences, e.g. (a*)*.  The nondeterministic
  346.   finite-state pattern matching machine in TDE will choke trying to find
  347.   an infinite number of zero occurrences of 'a'.
  348.  
  349.  
  350.  
  351.                       New features in TDE 2.2 include:
  352.  
  353.         Dirty Line color        = Config file
  354.         NextDirtyLine           = @F5
  355.         PrevDirtyLine           = @F6
  356.         Right margin justify    = ^F7
  357.         Stable Quicksort        = replaced the old insertion sort
  358.         Customize overscan      = config utility
  359.         Put support for two-key combo's back in, e.g. ^KQ
  360.         Edit text and binary files
  361.         + Source code may now be compiled w/ MSC 7.0, QuickC 2.51, and BC 3.1
  362.         + Make file supports MSC 7.0, QuickC 2.5, and BC 3.1
  363.         + autoload <LF>, <CRLF>, and some BIN (binary) files
  364.         + added signatures to structures changed by the config utility
  365.         + assertions in source code to find my many design flaws,
  366.             programming mistakes, and logic errors
  367.  
  368.  
  369.   In this version, the big text buffer was replaced by a double linked
  370.   list.  In general, many functions are faster.  However, this version
  371.   will not handle files quite as large as previous versions.  On the
  372.   other hand, this version will edit binary files.  I think just about
  373.   any ASCII or Extended ASCII character may be edited in any file.  Also
  374.   notice in the file header that the offset is displayed for files
  375.   opened in binary mode.
  376.  
  377.   When I added support for binary files, I wanted the ability to edit
  378.   some of the files produced by our lab equipment.  The data collectors
  379.   dump data in a fixed record size.  The record size varies among the
  380.   machines, so TDE needs to handle various fixed record formats.  The
  381.   default record length for binary files is 64.  The default record
  382.   size may be overridden on the command line with the /b switch.  Just
  383.   add the size of the desired fixed length record to the /b, e.g.
  384.  
  385.                            tde -b128 nmr.dat
  386.                            tde -b80  hplc.dat
  387.                            tde -b54  rs232.dat
  388.  
  389.   Now, whenever a line is changed, the line changes color.  The dirty
  390.   line color can be set in the config utility.  Incidentally, the dirty
  391.   line color can be set to the same color as regular text, which effectively
  392.   turns off this feature.  After using this feature for a while, I really
  393.   needed another function to move the cursor to dirty lines.  During the
  394.   day, I get interrupted quite a bit and forget what I just changed.  The
  395.   NextDirtyLine and PrevDirtyLine functions are really useful for finding
  396.   the changes I made.  Other times, I forget what I just did.  Often, I
  397.   forget what I just did five minutes ago.  I vaguely remember changing
  398.   something, but I can't remember what or where.  The NextDirtyLine and
  399.   PrevDirtyLine functions come in handy for those with bad memories, like
  400.   me.
  401.  
  402.   A minor feature was added to the word processing functions:  right margin
  403.   justification.  The SetRightMargin function asks whether or not to
  404.   justify the right margin.  In the ruler, a '<' indicates the right margin
  405.   is jagged and a '├' indicates the right margin is smooth.
  406.  
  407.   The simple insertion sort was replaced by the much faster Quicksort.  The
  408.   SortBoxBlock function works the same -- just faster.  Computer science
  409.   types seem to have a fixation on sorting and searching.
  410.  
  411.   In the DTE 5.1 editor, Doug supported the WordStar/Turbo X command
  412.   convention.  TDE now supports two-key commands in a generic way.  The first
  413.   key must be a recognized function key and the second key can be anything,
  414.   even a repeat of the first key.  The one restriction with two-key commands
  415.   is that macros cannot be assigned to two-key combo's.
  416.  
  417.   Now that I own both Microsoft C 7.0 and Borland C 3.1, the source was
  418.   changed so both compilers can compile TDE.
  419.  
  420.  
  421.                      New features in TDE 2.1 include:
  422.  
  423.         SetLtabs                = ^Tab
  424.         SetPtabs                = ^Tab, prompts for both Ltabs and Ptabs
  425.         BlockCompressTabs       = #@C
  426.         BlockIndentTabs         = #@I
  427.         ToggleTabInflate        = #@T
  428.         DefineDiff              = #F11
  429.         RepeatDiff              = F11
  430.         -f pattern files        = command line option to define grep
  431.         DefineGrep              = #F12
  432.         RepeatGrep              = F12
  433.         SwapBlock               = #@S
  434.         Sort sequence           = Config file
  435.  
  436.  
  437.                              Renamed functions:
  438.  
  439.         ReplaceString           == ReplaceForward || ReplaceBackward
  440.         PanUp                   == FixedScrollUP
  441.         PanDown                 == FixedScrollDn
  442.         PanLeft                 == ScrollLeft
  443.         PanRight                == ScrollRight
  444.  
  445.  
  446.  
  447.   At work, we may have several versions of one program.  For me, I find it
  448.   hard to remember which changes were made to which source files.  There
  449.   are several diff utilities that can point out differences, but I
  450.   probably need the edit those differences anyway.  The diff options I
  451.   find most useful are: setting the diff start, ignore leading space,
  452.   ignore all space, ignore blank lines, and ignore end of line.  The new
  453.   diff function in TDE prompts for the windows and the starting diff
  454.   options.  Once the diff is defined, press the RepeatDiff key at any time
  455.   to find the next diff.  With cursor sync turned on, it's easy to move
  456.   the cursors to begin the next diff.  Any two visible windows may be
  457.   diffed.  You may even diff windows in the same file, which is really
  458.   nice for comparing similar functions, data, or text in separate areas of
  459.   a file.
  460.  
  461.   Sort sequences were added for non-English languages: English, Esperanto,
  462.   Finnish, French, German, and Swedish.  You may customize the sort
  463.   sequence in tde.cfg.  This function is based on a program by Pierre
  464.   Jelenc, pcj1@columbia.edu.  Pierre's sort program will handle a much
  465.   wider range of alphabets and languages than TDE.
  466.  
  467.   The new SwapBlock function works only with BOX blocks.  Every once in a
  468.   while, I need to swap rows of numbers or areas of text.  The width of
  469.   the swap area assumed to be the width of the BOX.
  470.  
  471.  
  472.                    New features in TDE 2.0e include:
  473.  
  474.                       BlockRot13           = #@<
  475.                       BlockFixUUE          = #@>
  476.                       BlockEmailReply      = #@?
  477.  
  478.   ROT13 is an informal, voluntary standard used on the networks to send
  479.   text that some may consider inappropriate.  ROT13 is a convenient way
  480.   that allows one to choose whether or not to read the material.  To read
  481.   the material, one has to make a conscious and deliberate effort to
  482.   convert the text into a readable form.  ROT13 is also used to hide
  483.   answers to questions, puzzles, etc...  BlockRot13 alternately converts
  484.   ROT13 alpha characters into normal text and hides normal alpha
  485.   characters in ROT13.
  486.  
  487.   The most common default for sending large binary files across network
  488.   nodes and gateways uses UUencoding; however, some characters in the
  489.   UUencode set do not make the trip correctly.  On IBM mainframes, the
  490.   EBCDIC to ASCII translation don't do right.  Although I don't fully
  491.   understand why, but, three characters need to be fixed when receiving
  492.   text e-mail files, which include UUencoded files, from IBM mainframes.
  493.   BlockFixUUE will fix the three characters in a marked block.  The three
  494.   characters that need to be fixed in text (as opposed to binary) e-mail
  495.   files received from IBM mainframes are:
  496.  
  497.                   Hex               Decimal             ASCII
  498.  
  499.        1)     5d  ==>  7c         93  ==>  124        ]  ==>  |
  500.        2)     d5  ==>  5b        223  ==>   91        ╒  ==>  [
  501.        3)     e5  ==>  5d        229  ==>   93        σ  ==>  ]
  502.  
  503.  
  504.   When sending a reply to an e-mail, it is customary to prepend any lines
  505.   from the original e-mail with the ">" character.  BlockEmailReply
  506.   prepends "> " to the original line in an e-mail and prepends ">" to all
  507.   replies to replies in a LINE block.
  508.  
  509.  
  510.  
  511.                    New features in TDE 2.0 include :
  512.  
  513.          DateTimeStamp                           = ^2 or Control-@ sign
  514.          SortBoxBlock, ascending or descending   = @S
  515.          ToggleSmartTabs                         = @Tab
  516.          Dynamic left margin for writers         = @V
  517.          Pause, useful with macros               = ^P
  518.          Recursive macros
  519.          Support for Control-Break to stop recursive macros,
  520.               sorting, search/replacing, some block operations,
  521.               formatting text or paragraph, and printing.
  522.          Support for lines as long as 1040 characters.
  523.          Improved undo buffer management.  There is now room for
  524.               the last 10 by 1040  or  130 by 80 deleted lines.
  525.          Gathered all prompts into one header file to aid translation
  526.               of prompts and documentation into other languages.
  527.          Configuration file, option 6 in tdecfg.exe.
  528.  
  529.  
  530.   The date-time stamp was added to TDE because some users talk with field
  531.   units over the phone and the event needs to be date and time stamped.
  532.   Users may customize the date to local preferences, eg MM-DD-YY or
  533.   DD-MM-YY.  The time stamp may use either 12 hour or 24 hour form.
  534.  
  535.   Every once in a while, I need to sort data, names, etc..., in some of my
  536.   files.  The SortBoxBlock function was added to sort lines according to
  537.   the keys in a box block.  The keys may be sorted ascending or
  538.   descending, while the IGNORE/MATCH toggle determines whether case is
  539.   significant.  To sort multiple columns, start the sort with the least
  540.   significant key first.
  541.  
  542.   I also wrote a handler for the Control-Break interrupt, 0x1B.  On IBM
  543.   compatible PCs, the Control-Break key generates an interrupt via
  544.   hardware.  By writing a Control-Break interrupt handler, a user can
  545.   immediately gain control of a run-a-way recursive macro, printing job,
  546.   most box block operations, expanding tabs, trimming space from line
  547.   blocks, formatting a paragraph or text, search/replace, or a sort
  548.   operation.  Although one may trap Control-C, which is a software
  549.   generated interrupt, there is no telling when the operating system will
  550.   turn control over to a Control-C handler.  One may gain immediate
  551.   control with the Control-Break key, however.
  552.  
  553.   The undo-buffer space and management was greatly enhanced.  There is now
  554.   room for over 200 deleted lines in the buffer.  Users may now get back
  555.   entire functions that may have been deleted.
  556.  
  557.   All of the prompts in TDE were gathered into one header file to aid the
  558.   translation of documentation as well as the user prompts into other
  559.   languages.  Pierre Jelenc, pcj1@columbia.edu and a member of the Foreign
  560.   Language Education Forum (FLEFO) on CompuServe, has translated the
  561.   documentation and has created configuration files for several languages.
  562.   If you need a non-English version of TDE, contact Pierre to find out if
  563.   he has a version of TDE for you.
  564.  
  565.   A configuration file was added so that users may define all function
  566.   keys, modes, and colors from a configuration file.  Users may also
  567.   define macros in the configuration file.  Those who need to assign ASCII
  568.   and Extended ASCII character to unused function keys will find this
  569.   extremely useful.  Some alphabets need letters with all kinds of accent
  570.   marks.
  571.  
  572.  
  573.                    New features in TDE 1.5 include :
  574.  
  575.                     Ruler                     = @R
  576.                     Block trim trailing       = @T
  577.                     User defined macros:
  578.                        Record macro           = @F3
  579.                        Save macros to file    = #F1
  580.                        Load macros from file  = #F3
  581.                        Clear macro buffer     = ^ESC
  582.                     Critical error handler
  583.  
  584.   If by accident you forget to put a diskette in a floppy drive and try to
  585.   save a file or if you forget to turn on the printer before printing a
  586.   block or file, a critical error occurs.  That kind of error is the
  587.   infamous Abort, Retry, Ignore thing.  A routine was written to give some
  588.   information on the kind and the location of those errors when they
  589.   occur.  The TDE critical error handler gives you all kinds of info and
  590.   then prompts you for a response.  The timeout for critical errors varies
  591.   quite a bit.  Some timeouts may take a couple of minutes.
  592.  
  593.   When I "work" at the USDA, I often need to create or massage formatted
  594.   data files.  Also, a lot of engineers and scientists at the USDA program
  595.   in FORTRAN and the source code needs to be in a certain format.  When
  596.   working with those types of files, it is really useful to have a ruler
  597.   that explicitly shows which column the cursor is in.  The new ruler in
  598.   TDE shows margins, column numbers, and a column pointer.
  599.  
  600.  
  601.  
  602.                    New features in TDE 1.4 include :
  603.  
  604.               Split screen vertically            = F8
  605.               Number box block                   = Alt+N
  606.               Directory list                     = Alt+F1
  607.  
  608.   Also added in tdecfg was a choice of cursor styles and a switch for .bak
  609.   files.  Both of those options are in the mode section of tdecfg.
  610.  
  611.  
  612.  
  613.  
  614. Editor fields and information lines:
  615.  
  616.  
  617.                                Sample TDE screen
  618.  
  619.  
  620.          ┌─── File number - each window opened to same file has same number
  621.          │ ┌─── Window letter
  622.          │ │
  623.          │ │    ┌─── Dirty file indicator - asterisk
  624.          │ │    │ ┌─── File name
  625.          │ │    │ │                    ┌──── File attributes
  626.          │ │    │ │                    │    ┌──── Total number of lines in file
  627.          │ │    │ │                    │    │    ┌─── CR, CRLF, BIN mode
  628.          │ │    │ │                    │    │    │             ┌─── line:column
  629.                                                         
  630.       ┌──────────────────────────────────────────────────────────────┐
  631.       │    The first line on the screen contains file information    │
  632.       ├──────────────────────────────────────────────────────────────┤
  633.       │........1.....     Optional ruler line    ......7........8│
  634.       ├──────────────────────────────────────────────────────────────┤
  635.       │                                                              │
  636.       │                                                              │
  637.       │                          File area                           │
  638.       │                                                              │
  639.       │                                                              │
  640.       │                                                              │
  641.       ├──────────────────────────────────────────────────────────────┤
  642.       │                 Editor modes and information                 │
  643.       └──────────────────────────────────────────────────────────────┘
  644.                                                          Insert
  645.         │   │    │    │    │    │    │     │     │   │  │    │     └─ Overwrite
  646.         │   │    │    │    │    │    │     │     │   │  │    └───── ^Z at eof?
  647.         │   │    │    │    │    │    │     │     │   │  └───── trim trailing
  648.         │   │    │    │    │    │    │     │     │   │   space at eol, T = TRUE
  649.         │   │    │    │    │    │    │     │     │   │
  650.         │   │    │    │    │    │    │     │     │   └─── character under cursor
  651.         │   │    │    │    │    │    │     │     └───── CRLF or LF at eol?
  652.         │   │    │    │    │    │    │     └───── word wrap indicator
  653.         │   │    │    │    │    │    └───── Sync cursor in all windows?
  654.         │   │    │    │    │    └───── Ignore / Match search case?
  655.         │   │    │    │    └───── Indent mode?
  656.         │   │    │    └───── Tab modes = Smart/Fixed, In/Deflate, and ptabs
  657.         │   │    └───── Available memory for editing files
  658.         │   └───── Total number of windows, including hidden windows
  659.         └───── Total number of open files
  660.  
  661.  
  662.  
  663. Multiple keys:
  664.  
  665.   I use the following abbreviated key definitions throughout this file:
  666.  
  667.                 ^ = Control       # = Shift       @ = Alt
  668.  
  669.   For example, ^F5 means press and hold the Control key and then press F5
  670.   while holding down the Control key.
  671.  
  672.  
  673. Cursor movement:
  674.  
  675.                             101 Keyboard overview
  676.  
  677.             Cursor keys                               Keypad keys
  678.         ┌─────┬─────┬─────┐                ┌───────┬───────┬───────┬───────┐
  679.         │ Ins │Home │PgUp │                │NumLock│Grey / │Grey * │Grey - │
  680.         ├─────┼─────┼─────┤                ├───────┼───────┼───────┼───────┤
  681.         │ Del │ End │PgDn │                │ Home  │  Up   │ Pg Up │ Grey  │
  682.         └─────┴─────┴─────┘                ├───────┼───────┼───────┤   +   │
  683.                                            │ Left  │Center │ Right │       │
  684.               ┌─────┐                      ├───────┼───────┼───────┼───────┤
  685.               │ Up  │                      │  End  │ Down  │ Pg Dn │ Grey  │
  686.         ┌─────┼─────┼─────┐                ├───────┴───────┼───────┤       │
  687.         │Left │Down │Right│                │     Ins       │  Del  │ Enter │
  688.         └─────┴─────┴─────┘                └───────────────┴───────┴───────┘
  689.  
  690.                                                           
  691.     If you like using these grey                   With Num Lock off,
  692.      cursor keys, these function               you can probably guess most
  693.       assignments are for you.                of these function assignments.
  694.  
  695.           Grey cursor keys                            Keypad keys
  696.  
  697.  Up     - move cursor up                    Home   - toggle col 1 & beg of line
  698.  Down   - move cursor down                 ^Home   - first line in window
  699.  Left   - move cursor left                  Pg Up  - page up
  700.  Right  - move cursor right                ^Pg Up  - goto first page in file
  701. ^Up     - scroll cursor up                  Center - move to center of window
  702. ^Down   - scroll cursor down               ^Center - line to center of window
  703. ^Left   - cursor to previous word           End    - last character in line
  704. ^Right  - cursor to next word              ^End    - last line in window
  705. @Up     - pan up                            Pg Dn  - page down
  706. @Down   - pan down                         ^Pg Dn  - goto last page in file
  707. @Left   - pan left                          Ins    - toggle insert mode
  708. @Right  - pan right                         Del    - delete character
  709. @PgUp   - horizontal page left             ^Del    - stream delete character
  710. @PgDn   - horizontal page right             Grey - - scroll screen up
  711. ^#Left  - pan left                          Grey + - scroll screen down
  712. ^#Right - pan right                        ^Grey - - pan up
  713.                                            ^Grey + - pan down
  714.                                              Enter - Insert line and move down
  715.                                             #Enter - 1st char in next line
  716.                                             ^Enter - column 1 in next line
  717.  
  718.  
  719. Function Keys:
  720.  
  721.   I tried to use some logical order when I assigned functions to the
  722.   function keys.  I use a 101 keyboard most of the time, so it should be
  723.   easy to see the logical function grouping with it.  The function keys
  724.   on a 101 keyboard are placed along the top of the keyboard.  Functions
  725.   are arranged as follows:
  726.  
  727.  
  728.         Help    File              Find/Replace            Window
  729.               Functions              &  Diff             Commands
  730.          F1  F2  F3  F4          F5  F6  F7  F8          F9  F10  F11  F12
  731.  
  732.  
  733.    F1 = Instantaneous Help
  734.  
  735.   @F1 = Directory List
  736.         List the contents of a directory or matching files.  At the
  737.         prompt, press enter to list all files in the current directory or
  738.         enter any valid subdirectory name, file name, or wild card
  739.         characters.  You don't have to put a *.* at the end of a
  740.         subdirectory name; the directory list function adds those wild
  741.         card characters to subdirectory names as a default.  A '\' is
  742.         added to the end of subdirectory names in the file list.  To list
  743.         files in other directories, just move the cursor to the desired
  744.         subdirectory name and press enter.  When you see ..\ in the
  745.         directory list, the double periods represent the parent of the
  746.         current directory.  The .\ represents the current directory.  You
  747.         may move up and down the directory tree by selecting the parent or
  748.         childrens of the current directory.
  749.  
  750.  
  751. File Functions:
  752.  
  753.    F2 = Save file
  754.         Saves all changes made to file.  Existing file is overwritten by
  755.         the new file.  It does not prompt for a new file name -
  756.         automatically assumes you want to overwrite the old file.
  757.  
  758.    F3 = Quit file
  759.         Abandons any changes made in the file and closes or kicks the file
  760.         out of the current window.  If you are editing multiple files or
  761.         have multiple windows, TDE searches for any invisible files to
  762.         display in the current window.  If no invisible windows are found,
  763.         TDE combines windows.  If this is the only file being edited, F3
  764.         quits TDE.  If you made any changes to the file, it asks you if
  765.         you want to abandon them.  You can create an invisible window when
  766.         you load in a file over the current file.  Nothing happens to the
  767.         invisible file or window - you just can't see it.
  768.  
  769.         When I added vertical windows, this routine became a LOT more
  770.         complicated.  To keep things reasonably sane, let's only close
  771.         windows that have three common edges, eg.
  772.  
  773.                         ┌──────┬──────────┐
  774.                         │      │    no    │
  775.                         │      ├─────┬────┤
  776.                         │      │yes1 │yes1│
  777.                         │  no  ├─────┴────┤
  778.                         │      │   yes2   │
  779.                         │      ├──────────┤
  780.                         │      │   yes2   │
  781.                         └──────┴──────────┘
  782.  
  783.         Windows with 'no' cannot be closed.  Windows with 'yes' can be
  784.         combined with windows that have the same yes number.
  785.  
  786.  
  787.    F4 = File (save and quit)
  788.         This function is a combination of Save and Quit (F2 & F3 above).
  789.  
  790.    #F2 = Save as
  791.         If you don't want to overwrite the original file but you want to
  792.         save the contents of the current file, you may save the file under
  793.         a different file name.  This function prompts you for a file name
  794.         to save the changes (press escape to abort).
  795.  
  796.    #F4 = Edit new file
  797.         To bring another file into the editor, use this function.  It
  798.         loads the file into the current window and previous window becomes
  799.         invisible.  You can even load several copies of the same file.  I
  800.         like this because I often need to refer back to the original
  801.         unchanged file on disk.  When I make a booboo in a file, which is
  802.         quite often, I don't necessarily want to quit and start over; I
  803.         just want to get back the part that I messed up.  It is really
  804.         easy to mark the original text in a block and copy it to the place
  805.         where I made a booboo.  Each time a file is loaded into TDE, it is
  806.         treated as a different file.
  807.  
  808.    @F2 = Set file attributes
  809.         Change the attributes of a file.  Attributes are:  A = Archive,
  810.         S = System, H = Hidden, R = Read-Only.  You can change the
  811.         attributes of a file so that read-only files can be edited.  To
  812.         edit a read-only file:  1) edit the file, 2) change the file
  813.         attributes to archive, 3) save the changes made in the file, 4)
  814.         change the file attributes back to read-only.
  815.  
  816.    @F4 = Edit next file
  817.         If you type multiple file names or type wildcard characters on the
  818.         command line, press this key to bring in the next file or the next
  819.         matching file into the editor.
  820.  
  821.    -f pattern file(s)         (Command line DefineGrep)
  822.    -g pattern file(s)         (Command line DefineRegXGrep)
  823.        or
  824.    ^F12 = DefineRegXGrep
  825.    #F12 = DefineGrep
  826.         Grep will search files for a pattern and only load those files that
  827.         contain pattern.  The command line Define Grep works a little
  828.         differently than the function key Grep.  On the command line, spaces
  829.         are interpreted by DOS as delimiters.  Therefore, the search pattern
  830.         on the command line can not have any embedded spaces.  On the other
  831.         hand, the Fkey Grep search pattern may contain most any character.
  832.  
  833.         Defining Grep also defines the search pattern.  When a file is
  834.         loaded, press RepeatFind to go to the next occurrence of pattern.
  835.         There are actually two find structures - one for the standard
  836.         search function and one for Grep.   Defining Grep also defines
  837.         the search function.  However, redefining the standard search
  838.         structure has no effect on the Grep pattern.  The Grep pattern
  839.         remains defined until another Grep redefines it.
  840.  
  841.     F12 = RepeatGrep
  842.         After Grep has been defined, press this key to search the next file
  843.         for pattern.
  844.  
  845.  
  846. Macros:
  847.  
  848.    @F3 = Macro record
  849.         This key toggles macro record off and on.  A flashing "Recording"
  850.         is displayed in the lite bar, so it shouldn't be too difficult to
  851.         tell when record is on.  This function assigns a keystroke or a
  852.         series of keystrokes to an unused function key.  Keystrokes are
  853.         played back for some prompts.  Prompts that require the user to
  854.         input a name or pattern are played back.  Prompts that require the
  855.         user to enter a choice, "Overwrite existing file (y/n)?" for
  856.         example, are not played back.
  857.  
  858.         There is room for 1024 keystrokes in the macro buffer.  There are
  859.         no restrictions on the length of a single macro.  If you want, you
  860.         may define one macro that contains 1024 keystrokes.  When TDE
  861.         terminates, all macros definitions disappear.  Macro definitions
  862.         are temporary.  If you want to reuse macros that are defined
  863.         during an editing session, they need to be saved before you exit
  864.         TDE.
  865.  
  866.                              Recursive Macros
  867.  
  868.         "Recursive" macros are supported.  Only one level of recursion is
  869.         supported in TDE.  Here's a simple example of a recursive macro:
  870.  
  871.                         Alt-F3    = turn macro record on
  872.                         Alt-5     = assign the recording to Alt-5
  873.                         Down      = move cursor down a line
  874.                         Alt-5     = call the macro we just defined
  875.                         Alt-F3    = turn macro record off
  876.  
  877.         Enter this macro and press Alt-5 to see what a recursive macro
  878.         does.  Recursive macros repeatedly execute themselves until an
  879.         error condition occurs, which usually happens when the end of file
  880.         is reached.  I often use recursive macros to delete certain lines
  881.         in a file or to rearrange the fields of a formatted data file.
  882.  
  883.         Each editor function in TDE returns a code to the macro processor
  884.         that indicates whether or not an error occurred.  Here are some
  885.         conditions that generate an error:  attempting to move the cursor
  886.         past the end of file or behind the start of the file, trying to
  887.         add too many characters in a line, attempting block operations
  888.         with no marked block, etc...
  889.  
  890.         One interesting phenomenon about recursive macros is that a macro
  891.         can be defined that never terminates.  The simplest
  892.         non-terminating macro definition in TDE is:
  893.  
  894.                   Alt-F3  = turn macro record on
  895.                   Alt-7   = assign the recording to Alt-7
  896.                   Alt-7   = call the macro we just defined
  897.                   Alt-F3  = turn macro record off
  898.  
  899.         This a+7 macro carries out no instructions.  The only thing this
  900.         macro does is call itself.  In a perfect world, this macro will
  901.         execute forever.  There are lots of ways to create non-terminating
  902.         recursive macros.  Be creative and try creating a few non-
  903.         terminating recursive macros yourself.  With several different
  904.         sizes and shapes of horizontal and vertical windows on the screen
  905.         and with cursor sync toggled on, you can create some really neat
  906.         macros using cursor movement keys.  If you get tired of waiting
  907.         for forever, just press Control-Break to stop any macro.
  908.  
  909.                       A Really Neat Recursive Macro
  910.  
  911.         Here's a really neat recursive macro that you might try with
  912.         cursor sync turned off.  Edit a fairly large file, one with at
  913.         least a 1000 lines, and move the cursor to line 500 or the half
  914.         way point.  Then, split the screen into several vertical windows
  915.         with about 15 columns in each window , e.g.:
  916.  
  917.                 ┌───────┬───────┬────────┬───────┬───────┐
  918.                 │       │       │        │       │       │
  919.                 │       │       │        │       │       │
  920.                 │       │       │        │       │       │
  921.                 │       │       │ start  │       │       │
  922.                 │       │       │        │       │       │
  923.                 │       │       │        │       │       │
  924.                 │       │       │        │       │       │
  925.                 └───────┴───────┴────────┴───────┴───────┘
  926.  
  927.         With cursor sync turned off and macro record turned on, define a
  928.         macro that 1) moves the cursor down in one window, 2) goes to the
  929.         next window and moves the cursor up, 3) goes to the next window
  930.         and moves the cursor down, 4) when the cursor finally makes it
  931.         back to the starting window, make the macro recursive.  Suppose
  932.         the cursor is in the window labeled "start" in the sample screen
  933.         above.  Here's the way the keystrokes in this macro would be
  934.         recorded:
  935.  
  936.  
  937.                 Alt-F3    = turn macro record on
  938.                 Alt-8     = assign this macro to Alt-8
  939.                 Down      = move cursor down in "start" window
  940.                 F10       = next window
  941.                 Up        = move cursor up
  942.                 F10       = next window
  943.                 Down      = move cursor down
  944.                 F10       = next window
  945.                 Down      = move cursor down
  946.                 F10       = next window
  947.                 Up        = move cursor up
  948.                 F10       = next window - cursor is now in "start"
  949.                 Alt-8     = call the macro just defined. it's now recursive.
  950.                 Alt-F3    = turn macro record off
  951.  
  952.         Press Alt-8 and watch a really neat recursive macro.
  953.  
  954.  
  955.    #F1 = Save macro file
  956.         Saves all macro definitions to a file.  TDE prompts for the macro
  957.         file name.
  958.  
  959.    #F3 = Load macro file
  960.         Prompts for a search pattern or file name.  I can never remember
  961.         macro file or path names, so this function uses a file pick list.
  962.  
  963.    ^ESC = Clear macros
  964.         Resets or clears all macros.
  965.  
  966.    ^P  = Pause
  967.         When this function is part of a macro, press any key to continue
  968.         the macro or press ESC to halt or break the macro.
  969.  
  970.  
  971. Find and Search/Replace:
  972.  
  973.    TDE uses the Boyer-Moore search algorithm for finding strings.  Typically,
  974.    the longer the search pattern the faster the search.  So, if you want to
  975.    speed up searches, try searching for longer patterns, e.g. phrases.
  976.  
  977.    ^F5 = Toggle search case
  978.         You can toggle the case of the search flag at any time, even
  979.         after you define the search pattern.
  980.  
  981.    #F5 = find forward
  982.         To define the search pattern, use this function.  It prompts you
  983.         for the search pattern.  The pattern is defined, across files,
  984.         until changed.
  985.  
  986.    #F6 = find backward
  987.         Same as find forward except search backward in file.
  988.  
  989.    F5 = Repeat find forward
  990.         Once the search pattern has been defined (Shift F5 or Shift F6),
  991.         you can press this key at any time in any file to find the next
  992.         occurrence of pattern.  I decided to use two sets of functions to
  993.         perform searches.  Once I found a pattern, I might do some editing
  994.         and then find the next occurrence.  I hate to define the search
  995.         pattern over and over or set the search direction over and over.
  996.         This function does a wrap search - when it reaches the eof it
  997.         starts over at the beginning of the file.
  998.  
  999.    F6 = Repeat find backward
  1000.         Like repeat find forward, you can press this key at anytime once
  1001.         the search pattern has been defined.
  1002.  
  1003.    Repeat find forward2
  1004.         Like F5 except the cursor is not repositioned to the middle of the
  1005.         screen.  This function is useful when working with data files.
  1006.  
  1007.    Repeat find backward2
  1008.         Like F6 except the cursor is not repositioned to the middle of the
  1009.         screen.
  1010.  
  1011.    #F8 = Replace String
  1012.         This function prompts you for the search pattern and the
  1013.         replacement text.  It also prompts for the replace direction.  If
  1014.         you want to match the search case, remember to toggle the search
  1015.         flag, which can be done at any time.  You can either do prompt or
  1016.         no prompt replacing.   Regardless of prompt or no prompt
  1017.         replacing, this function actually moves the cursor to the pattern
  1018.         and displays it on the screen and replaces the text. If you are
  1019.         using TDE on a slow machine, you can see the search/replace taking
  1020.         place.  I implemented the function this way because I just like to
  1021.         see what the search/replace function is doing.  Press
  1022.         Control-Break to stop no prompt replacing.
  1023.  
  1024.    #F7  = FindRegX
  1025.         Prompts for regular expression to find.  Press F1 for a help table.
  1026.  
  1027.    F7 = RepeatFindRegX
  1028.         Once a regular expression is defined, find next regular expression.
  1029.  
  1030.    @F7 = RepeatFindRegXBackward
  1031.         Once a regular expression is defined, find previous reg ex.
  1032.  
  1033.  
  1034. Diff Functions:
  1035.  
  1036.    #F11 = DefineDiff
  1037.         This function initializes diff.  It prompts for the window number
  1038.         and letter to diff, ignore leading space, ignore all space, ignore
  1039.         blank lines, ignore case, and ignore end of line.  Any two windows
  1040.         may be diffed.  Diff only requires that the windows be visible.
  1041.  
  1042.                                Diff prompts
  1043.  
  1044.       DIFF:  Enter first window number and letter (e.g. 1a) :
  1045.       DIFF:  Enter next window number and letter (e.g. 2a) :
  1046.       DIFF:  Start diff at (B)eginning of file or (C)urrent position? (b/c)
  1047.       DIFF:  Ignore leading spaces (y/n)?
  1048.       DIFF:  Ignore all space (y/n)?
  1049.       DIFF:  Ignore blank lines (y/n)?
  1050.       DIFF:  Ignore end of line (useful with reformatted paragraphs) (y/n)?
  1051.  
  1052.     F11 = RepeatDiff
  1053.         Once the diff has been defined, press RepeatDiff to find the next
  1054.         diff.
  1055.  
  1056.  
  1057. Window Functions:
  1058.  
  1059.    F8 = Split window vertically
  1060.         Splits the screen at the current cursor location.  The current
  1061.         file is displayed in multiple windows.  Changes to a file are
  1062.         echoed in all windows opened to the same copy of that file.  You
  1063.         can also see any marked blocks in the same copy of the file in
  1064.         different windows.  There has to be at least 15 columns in any
  1065.         window, so the number of visible windows is limited by the display
  1066.         screen.
  1067.  
  1068.    F9 = Split window horizontally
  1069.         Splits the screen at the current cursor location.  There has to be
  1070.         at least 1 text line in any window, so the number of visible
  1071.         windows is limited by the display screen.
  1072.  
  1073.    #F9 = Resize window
  1074.         Sometimes there is a need to concentrate on the contents of one
  1075.         window.  Use the up and down arrow keys to adjust the current
  1076.         window to desired size.  Changing the size of the top window is
  1077.         not allowed.
  1078.  
  1079.    ^F9 = Zoom window
  1080.         Makes the current window fill the whole screen.  All windows
  1081.         except the current window become invisible.
  1082.  
  1083.    F10 = Next window
  1084.         If more than one window is displayed, you can press one key to
  1085.         move to the next window.
  1086.  
  1087.    #F10 = Previous window
  1088.         Move to previous window - opposite of next window.
  1089.  
  1090.    ^F10 = Next Hidden Window
  1091.         Displays "hidden" or "invisible" windows in the same place as the
  1092.         current window.  The current window then becomes invisible.
  1093.  
  1094.  
  1095. Block Commands:
  1096.  
  1097.   Block operations can be done within or between files.  Operations on
  1098.   line blocks that move text are carried out on the line immediately
  1099.   below the cursor.  Operations on box or stream blocks that move text
  1100.   begin at the column of the cursor.  Press Control-Break to stop most Box
  1101.   operations.  Nearly all Line and Stream operations happen so fast that
  1102.   you can't stop them once they are started.
  1103.  
  1104.    @B - Mark Box Block
  1105.         This key is used to mark both the beginning and ending corner of
  1106.         a box block.
  1107.  
  1108.    @L - Mark Line Block
  1109.         This key is similar to the operation of the box block, but entire
  1110.         lines are marked.
  1111.  
  1112.    @X - Mark Stream Block
  1113.         All the text between the beginning and ending column, sorta like a
  1114.         stream of characters, is marked.  Useful with sentences.
  1115.  
  1116.    @U - Unmark Block
  1117.         If you make a booboo when marking blocks, press @U to unmark the
  1118.         block and start over.  After certain block operations, the block
  1119.         may remain marked.
  1120.  
  1121.    @G - Group Delete block
  1122.         Sorta self explanatory.  This function deletes the text in the
  1123.         marked block.
  1124.  
  1125.    @M - Move block
  1126.         Move the cursor to the desired location and press @M to move the
  1127.         marked block.  In line mode, the text is moved to the line
  1128.         immediately below the cursor.  In box and stream mode, the block
  1129.         is moved to the column of the cursor.
  1130.  
  1131.    @C - Copy block
  1132.         With line blocks, the block is copied to the line below the
  1133.         cursor.  With box and stream blocks, the block is copied
  1134.         beginning at the column of the cursor.  If you try to copy a
  1135.         Line block within itself, the block copy starts at the first
  1136.         line immediately after the marked block.
  1137.  
  1138.    @K - Kopy block
  1139.         Same as copy block except block stays marked.  It's sorta like a
  1140.         poor man's cut-and-paste buffer.
  1141.  
  1142.    @O - Overlay block
  1143.         You can only overlay Box blocks.  The original block stays marked
  1144.         after the operation.
  1145.  
  1146.    @F - Fill box block
  1147.         Fills the marked Box block with character.  This function is
  1148.         useful for filling in a column of periods for tables and such.
  1149.  
  1150.    @N - Number box block
  1151.         TDE prompts you for the starting number, the increment, and
  1152.         whether to left or right justify the numbers.  TDE only handles
  1153.         integers  -  no floating point numbers are allowed.  I felt that
  1154.         there were too many things involved in real numbers, eg. number
  1155.         of significant places to left of decimal, to right of decimal,
  1156.         exponents, engineering form, scientific form, etc....  If you
  1157.         want real numbers, just use a combination of the number box
  1158.         and fill box functions.  Use the fill box function to make a
  1159.         column of decimals and the number box function to number the left
  1160.         and right side of the decimal.
  1161.  
  1162.    @P - Print block
  1163.         Prints the block to the PRN device.  I haven't tried redirecting
  1164.         the PRN, but it should work.  This function prompts for block or
  1165.         file to print.  Press Control-Break to stop printing.
  1166.  
  1167.    @S - Sort box block
  1168.         Lines are sorted, ascending or descending, using the contents of
  1169.         the box block as the sort keys.  The Ignore/Match toggle
  1170.         determines whether case of the keys is significant.  To sort
  1171.         multiple columns, sort the least significant column first.  Press
  1172.         Control-Break to stop.
  1173.  
  1174.   #@S - Swap block
  1175.         Swap block only works with BOX blocks.  The area to be swapped
  1176.         is assumed to be the width of the BOX block.  Make sure the
  1177.         cursor is at the top left corner of the area to swap before
  1178.         swapping.
  1179.  
  1180.    @W - Write block to file
  1181.         Writes the marked block to a file.  TDE prompts for the file
  1182.         name.
  1183.  
  1184.    @E - Block expand tabs
  1185.         Expands the tabs in the marked block, which must be a LINE block,
  1186.         using the current tab setting.  Press Control-Break to stop.
  1187.  
  1188.    @T - Block trim trailing
  1189.         Trims trailing space, if any, at the end of each line in a LINE
  1190.         block.  Press Control-Break to stop.
  1191.  
  1192.    @< - Block upper case
  1193.         Convert all lower case characters in the block to upper case.
  1194.         Our old IBM mainframe line printers can only print upper case.
  1195.  
  1196.    @> - Block lower case
  1197.         Convert all upper case characters in the block to lower case.
  1198.  
  1199.    @? - Block strip high bit
  1200.         Strip the high bit off all characters in the block.  This function
  1201.         is useful when editing files produced by WordStar.
  1202.  
  1203.    #@< - BlockRot13
  1204.         Convert all alpha characters in a block using ROT13.
  1205.  
  1206.    #@> - BlockFixUUE
  1207.         Fixes the EBCDIC to ASCII problem with text e-mail.
  1208.  
  1209.    #@? - BlockEmailReply
  1210.         Prepends the customary "> " or ">" to e-mail replies to lines in a
  1211.         LINE block.
  1212.  
  1213.  
  1214. Word Processing Commands:
  1215.  
  1216.    @V - toggle word wrap
  1217.         Toggle word wrap between off, Fixed Wrap, and Dynamic Wrap.  In
  1218.         Fixed Wrap mode, the left margin is explicitly determined by the
  1219.         left margin setting.  In Dynamic Wrap mode, the left margin is
  1220.         determined by the indentation of the current line.  Writers may
  1221.         find the Dynamic Wrap mode easier to use.  If the cursor is
  1222.         somewhere in the line, words are pushed to the next line.
  1223.  
  1224.         In TDE, other than margins, word wrap and format paragraph or
  1225.         format text have nothing to do with each other.  Word wrap is
  1226.         used to push characters or the cursor to the next line when the
  1227.         right margin is violated.  Format paragraph and format text can
  1228.         be used at any time - they do not depend on the state of the
  1229.         WordWrap flag.
  1230.  
  1231.   ^F6 - Set Left margin
  1232.         May be set to any column equal to or greater than 1 and less than
  1233.         the right margin.
  1234.  
  1235.   ^F7 - Set Right margin
  1236.         May be set to any column greater than the left margin and less
  1237.         than the maximum line length or 1040.
  1238.  
  1239.   ^F8 - Set Paragraph margin
  1240.         The paragraph margin may be set to any column less than the right
  1241.         margin.
  1242.  
  1243.   format paragraph - not currently assigned to a key
  1244.         Text is formatted from the beginning of the paragraph according
  1245.         to the current left, right, and paragraph margins.  If the cursor
  1246.         is not on the beginning line of a paragraph, TDE searches for
  1247.         start of the paragraph and formatting starts there.  The entire
  1248.         paragraph is formatted according to the margins.
  1249.  
  1250.   ^B - Format Text
  1251.         Text is formatted from the cursor onward.  This function does not
  1252.         search for the beginning of the paragraph to start the format.
  1253.  
  1254.   @F8 - Left justify
  1255.         Beginning of current line is adjusted to start at left margin
  1256.  
  1257.   @F9 - Right justify
  1258.         End of current line is adjusted so it ends at the right margin
  1259.  
  1260.  @F10 - Center justify
  1261.         Current line is centered between the left and right margins.
  1262.  
  1263.  
  1264. Tabs:
  1265.  
  1266.    Tab
  1267.         If in insert mode, insert the appropriate number of spaces for a
  1268.         tab and move the cursor left.  If in overwrite mode, just move
  1269.         the cursor left w/o inserting text.
  1270.  
  1271.   #Tab
  1272.         Move cursor to previous tab.
  1273.  
  1274.   ^Tab
  1275.         Set ptabs and ltabs.
  1276.  
  1277.   @Tab
  1278.         Toggle smart tab mode.  Smart tab positions are determined by
  1279.         looking for the first, previous, non-blank line above the cursor
  1280.         and then positioning the cursor at the beginning of the next or
  1281.         previous word from the column of the cursor.  It's useful for
  1282.         building tables and formatted data files.
  1283.  
  1284.    #@T
  1285.         Toggle TabInflate mode.  In TabInflate mode, tabs are not
  1286.         physically expanded.  Tabs are filled with space to give the
  1287.         illusion of physical expansion.
  1288.  
  1289.  
  1290. Toggles:
  1291.  
  1292.    ^F1
  1293.         Toggle cursor sync.  Only cursor movement commands are synced.
  1294.         Commands that change text are not synced.
  1295.  
  1296.    ^F2
  1297.         Toggle eol display.  A special character is displayed in the
  1298.         column of the actual new line.
  1299.  
  1300.    ^F3
  1301.         Toggle writing <CR><LF>, <LF>, or nothing at end of line.  TDE
  1302.         will read a text file with lines that end in either method;
  1303.         however, you may want to write the file in a different method.
  1304.         I think *nix systems only want a <LF> of the end of line.
  1305.  
  1306.    ^F4
  1307.         Toggle trimming trailing space at the end of line.  A 'T' is
  1308.         displayed in the bottom right of the mode line to indicate
  1309.         trailing space is trimmed.
  1310.  
  1311.    ^F5 = Toggle search or sort case
  1312.         You can toggle the case flag at any time, even after you define
  1313.         the search pattern.
  1314.  
  1315.    Ins
  1316.         Toggle between insert and overwrite mode.
  1317.  
  1318.    @I
  1319.         Toggle between indent and no indent mode.  In indent mode, TDE
  1320.         searches for the first non-blank character on previous lines and
  1321.         places the cursor on that column when a carriage return is
  1322.         pressed.  When backspacing in indent mode, TDE lines up the
  1323.         indentation with the first non-blank character of the previous
  1324.         line(s).
  1325.  
  1326.    @R - Toggle ruler
  1327.         Toggle display of ruler in all visible windows.
  1328.  
  1329.    @V - toggle word wrap
  1330.         Toggle word wrap between Off, Fixed Wrap, and Dynamic Wrap.
  1331.  
  1332.    @Z
  1333.         Toggle writing Control Z at the end of file.  Some programs may
  1334.         misbehave if a Control Z is not at the end of the file.
  1335.  
  1336.  
  1337. Other keys:
  1338.  
  1339.    Enter
  1340.         Insert a newline at the cursor.  If the cursor is in the middle of
  1341.         a line, the line is split at the cursor.  Indentation is matched
  1342.         if the editor is in the Indent mode.
  1343.  
  1344.    #Enter
  1345.         Move the cursor down a line.  The cursor is placed on the first
  1346.         non-blank character in the next line.  No lines are added to the
  1347.         file.
  1348.  
  1349.    ^Enter
  1350.         Move the cursor down a line.  The cursor is placed on column 1 in
  1351.         the next line.  No lines are added to the file.
  1352.  
  1353.    Up (arrow)
  1354.         Move cursor up.
  1355.  
  1356.    Down (arrow)
  1357.         Move cursor down.
  1358.  
  1359.    Left (arrow)
  1360.         Move cursor left.
  1361.  
  1362.    Right (arrow)
  1363.         Move cursor right.
  1364.  
  1365.    Home
  1366.         Toggles between the first non-blank character and column zero.
  1367.  
  1368.    End
  1369.         Move cursor to the end of line character.
  1370.  
  1371.    Page Up
  1372.         Move cursor up one page.
  1373.  
  1374.    Page Down
  1375.         Move cursor down one page.
  1376.  
  1377.    ^Right
  1378.         Move cursor one word right.
  1379.  
  1380.    ^Left
  1381.         Move cursor one word left.
  1382.  
  1383.    ^#Right   (Control+Shift+Right)
  1384.         Pan the screen one character to the right.
  1385.  
  1386.    ^#Left    (Control+Shift+Left)
  1387.         Pan the screen one character to the left.
  1388.                                                 
  1389.    ^Home
  1390.         Move cursor to first line on screen.
  1391.  
  1392.    ^End
  1393.         Move cursor to last line on screen.
  1394.  
  1395.    ^Page Up
  1396.         Move cursor to first page in file.
  1397.  
  1398.    ^Page Down
  1399.         Move cursor to last page in file.
  1400.  
  1401.    Zip to line
  1402.         Move to line number.  TDE prompts for line number.  Press Escape
  1403.         to abort.
  1404.  
  1405.    Center
  1406.         The cursor is moved to the center of the current window.
  1407.  
  1408.   ^Center
  1409.         The line the cursor is on is moved to the center of the current
  1410.         window.
  1411.  
  1412.    Grey -  (on the key pad) or
  1413.    ^Down
  1414.         Scroll window up with cursor staying on same line in file.
  1415.  
  1416.    Grey +  (on the key pad) or
  1417.    ^Up
  1418.         Scroll window down with cursor staying on same line in file.
  1419.  
  1420.   @Grey Up (the arrow in the cursor/control cluster) or
  1421.   ^Grey -  (grey - on keypad)
  1422.         Cursor stays on same line of the screen as the file scrolls up.
  1423.  
  1424.   @Grey Down (the arrow in the cursor/control cluster) or
  1425.   ^Grey +  (grey + on keypad)
  1426.         Cursor stays on same line of the screen as the file scrolls down.
  1427.  
  1428.   @Grey PgUp
  1429.         Horizontal page left.
  1430.  
  1431.   @Grey PgDn
  1432.         Horizontal page right.
  1433.  
  1434.    ESC - undo line
  1435.         Get back the original unchanged line.  When cursor is moved off a
  1436.         line, all changes to the file are made and there is no way to get
  1437.         back the contents of a line.
  1438.  
  1439.    Del
  1440.         Delete the character, if any, under the cursor.
  1441.  
  1442.    ^Del
  1443.         Delete the characters in the file as if they were a stream.
  1444.         Lines will be joined at the cursor and eventually every
  1445.         character in the file may be deleted.
  1446.  
  1447.    Backspace
  1448.         Delete the character to the left of the cursor and move left.  If
  1449.         the cursor is on the first column of a line, the current line is
  1450.         joined with the line above.  If in indent mode and the cursor is
  1451.         on the first non-blank character, TDE matches the indentation of
  1452.         the previous line(s).
  1453.  
  1454.    @=
  1455.         Duplicates the current line.
  1456.  
  1457.    @-
  1458.         Deletes the text from the cursor to the end of line.
  1459.  
  1460.    ^Y
  1461.         Deletes current line, cursor does not move.
  1462.  
  1463.    @D
  1464.         Deletes current line, cursor does not move (exactly same as ^Y).
  1465.  
  1466.    @Y  or  ^U
  1467.         Undelete the most recently deleted line.  The undelete buffer has
  1468.         room for 200 lines of deleted text.  If more than 200 lines are
  1469.         deleted, the oldest line(s) are pushed out before the new one is
  1470.         added.  You may press ^U repeatedly to undelete all lines in the
  1471.         buffer.
  1472.  
  1473.         Deleted lines from line delete, delete to end of line, word
  1474.         delete, join line, and backspace are stored in the undelete
  1475.         buffer.
  1476.  
  1477.    @A
  1478.         Add a blank line below cursor.
  1479.  
  1480.    ^_  or Control underline
  1481.         Split line at column of cursor.  If in indent mode, the split line
  1482.         is autoindented.
  1483.  
  1484.    @J
  1485.         Join the current line with the line below.
  1486.  
  1487.    ^]
  1488.         Paren Balance.
  1489.  
  1490.    @1 - @3
  1491.         Set a file marker.  Each file may have up to 3 markers.
  1492.  
  1493.    #@1 - #@3    (Shift+Alt+1 thru Shift+Alt+3)
  1494.         Goto a previously defined file marker.
  1495.  
  1496.  
  1497.    ^@  (Control+At sign -- not Control+Alt.  Control+At sign is the first
  1498.           character in the ASCII character set, Control+2 on many keyboards)
  1499.         Writes the current system date and time at the column of the
  1500.         cursor.  Use tdecfg to set the desired year and time format.
  1501.  
  1502.    Control-Break
  1503.         In TDE, Control-Break will stop printing, sorting,
  1504.         search/replacing, and recursive macros.
  1505.  
  1506.  
  1507.  
  1508. WordStar style commands:
  1509.  
  1510.   A limited number of WordStar style commands are implemented in TDE.  I
  1511.   have no plans, whatsoever, to implement any additional WordStar style
  1512.   commands.  This implementation may not correspond exactly to the
  1513.   WordStar command convention.  WordStar is a trademark of WordStar
  1514.   International.
  1515.  
  1516.    ^A - word left
  1517.    ^B - format text
  1518.    ^C - screen down
  1519.    ^D - character right
  1520.    ^E - line up
  1521.    ^F - word right
  1522.    ^G - delete character
  1523.    ^H - backspace
  1524.    ^I - tab
  1525.    ^J - help
  1526.    ^K - n/a
  1527.    ^L - n/a
  1528.    ^M - return (carriage control, enter)
  1529.    ^N - add line below cursor
  1530.    ^O - n/a
  1531.    ^P - n/a
  1532.    ^Q - n/a
  1533.    ^R - page up
  1534.    ^S - character left
  1535.    ^T - word delete
  1536.    ^U - undelete line
  1537.    ^V - toggle insert mode
  1538.    ^W - scroll up line
  1539.    ^X - line down
  1540.    ^Y - delete line
  1541.    ^Z - scroll line down
  1542.    ^\ - redraw screen
  1543.  
  1544.  
  1545. Editor command summary:
  1546.  
  1547.    Function                      Description
  1548.  
  1549. Help                    Display instantaneous help screen
  1550. Rturn                   Insert newline and move down while matching indentation
  1551. NextLine                Move cursor to first character in next line
  1552. BegNextLine             Move cursor to first column in next line
  1553. LineDown                Move cursor down a line
  1554. LineUp                  Move cursor up a line
  1555. CharRight               Move cursor right one character
  1556. CharLeft                Move cursor left one character
  1557. PanRight                Pan screen one character right
  1558. PanLeft                 Pan screen one character left
  1559. WordRight               Move cursor to beginning of next word
  1560. WordLeft                Move cursor to beginning of previous word
  1561. ScreenDown              Page screen down
  1562. ScreenUp                Page screen up
  1563. EndOfFile               Move to the last page in a file
  1564. TopOfFile               Move to the first page in a file
  1565. BotOfScreen             Move cursor to bottom of current window
  1566. TopOfScreen             Move cursor to top of current window
  1567. EndOfLine               Move cursor to end of line
  1568. BegOfLine               Move cursor to first character in line or column 1
  1569. JumpToLine              Move cursor to line entered by user
  1570. CenterWindow            Move cursor to center of current window
  1571. CenterLine              Move current line and cursor to center of window
  1572. HorizontalScreenRight   Page screen right
  1573. HorizontalScreenLeft    Page screen left
  1574. ScrollDnLine            Scroll screen down 1 line and cursor moves with line
  1575. ScrollUpLine            Scroll screen up 1 line and cursor moves with line
  1576. PanUp                   Scroll screen up 1 line and cursor does not move
  1577. PanDn                   Scroll screen down 1 line and cursor does not move
  1578. ToggleOverWrite         Toggle insert/overwrite mode and cursor changes shape
  1579. ToggleSmartTabs         Toggle smart tab mode on/off
  1580. ToggleIndent            Toggle indent mode on/off
  1581. ToggleWordWrap          Toggle word wrap on/off
  1582. ToggleCRLF              Toggle CRLF/LF at eol when writing file to disk
  1583. ToggleTrailing          Toggle trim trailing space at eol
  1584. ToggleZ                 Toggle writing ^Z at eof
  1585. ToggleEol               Toggle display of eol character
  1586. ToggleSync              Toggle cursor sync
  1587. ToggleRuler             Toggle ruler display
  1588. ToggleTabInflate        Toggle expanding tabs in display
  1589. SetTabs                 Set file tabs
  1590. SetLeftMargin           Set left margin
  1591. SetRightMargin          Set right margin
  1592. SetParagraphMargin      Set paragraph margin
  1593. FormatParagraph         Format the entire paragraph according to margins
  1594. FormatText              Format from the cursor line to end of paragraph
  1595. LeftJustify             Left justify a line
  1596. RightJustify            Right justify a line
  1597. CenterJustify           Center justify a line
  1598. Tab                     Move cursor to next tab and add spaces if insert mode
  1599. BackTab                 Move cursor to previous tab and delete if insert mode
  1600. ParenBalance            Match (), {}, or [] under the cursor
  1601. BackSpace               Delete previous character
  1602. DeleteChar              Delete current character, but do not join lines
  1603. StreamDeleteChar        Delete current character and join lines if at eol
  1604. DeleteLine              Delete current line
  1605. DelEndOfLine            Delete from the cursor to the eol
  1606. WordDelete              Delete from the cursor to the end of word
  1607. AddLine                 Insert a blank line under the cursor
  1608. SplitLine               Split the current line at the cursor
  1609. JoinLine                Join next line with current line at the cursor
  1610. DuplicateLine           Duplicate the current line
  1611. AbortCommand            Abort editor functions
  1612. UndoLine                Get back the original contents of a line
  1613. UndoDelete              Get back up to the last 200 lines deleted text
  1614. ToggleSearchCase        Toggle match/ignore search case or sort case
  1615. FindForward             Prompt for pattern and search forward
  1616. FindBackward            Prompt for pattern and search backward
  1617. RepeatFindForward1      Repeat find forward and adjust cursor if needed
  1618. RepeatFindForward2      Repeat find forward and do not adjust cursor
  1619. RepeatFindBackward1     Repeat find backward and adjust cursor if needed
  1620. RepeatFindBackward2     Repeat find backward and do not adjust cursor
  1621. ReplaceString           Search and replace pattern forward/backward
  1622. DefineDiff              Define starting diff options
  1623. RepeatDiff              Find the next diff
  1624. MarkBox                 Mark start or end of a box block
  1625. MarkLine                Mark start or end of a line block
  1626. MarkStream              Mark start or end of a stream block
  1627. UnMarkBlock             Unmark a block
  1628. FillBlock               Fill a box block with prompted character
  1629. NumberBlock             Fill a box block with starting number using increment
  1630. CopyBlock               Copy a block to cursor and unmark block
  1631. KopyBlock               Copy a block to cursor and leave block marked
  1632. MoveBlock               Move a block to cursor and unmark block
  1633. OverlayBlock            Overlay a box block
  1634. DeleteBlock             Delete a block
  1635. SwapBlock               Swap contents of BOX block w/ cursor
  1636. BlockToFile             Write a marked block to a file
  1637. PrintBlock              Print a block or file
  1638. BlockExpandTabs         Expand tabs in marked LINE block using tab setting
  1639. BlockCompressTabs       Compress space to tabs in LINE block
  1640. BlockIndentTabs         Compress leading space to tabs in LINE block
  1641. BlockTrimTrailing       Trim trailing space from all lines in a line block
  1642. BlockUpperCase          Convert all lower case in block to upper case
  1643. BlockLowerCase          Convert all upper case in block to lower case
  1644. BlockRot13              Rotate alpha characters by 13
  1645. BlockFixUUE             Fix the ASCII-EBCDIC translation problem
  1646. BlockEmailReply         Prepend '>' to included mail blocks
  1647. BlockStripHiBit         Strip the high bit from all characters in block
  1648. SortBoxBlock            Sort line according to keys in box block
  1649. DateTimeStamp           Insert system time and date
  1650. EditFile                Editor prompts for file to edit
  1651. DirList                 List matching files in subdirectories
  1652. File                    Save file and quit window
  1653. Save                    Save file
  1654. SaveAs                  Save file under a new file name
  1655. SetFileAttributes       Set current file attributes
  1656. EditNextFile            Edit next file on command line
  1657. DefineGrep              Initial simple pattern and search files
  1658. RepeatGrep              Search and load next file that contains pattern
  1659. RedrawScreen            Redraw the screen
  1660. SizeWindow              Change size of current window
  1661. SplitHorizontal         Split current window horizontally
  1662. SplitVertical           Split current window vertically
  1663. NextWindow              Move to next window
  1664. PreviousWindow          Move to previous window
  1665. ZoomWindow              Make current window the maximum window size
  1666. NextHiddenWindow        Switch to next hidden window
  1667. SetMark1                Set a file marker
  1668. SetMark2
  1669. SetMark3
  1670. GotoMark1               Move cursor to previously defined marker
  1671. GotoMark2
  1672. GotoMark3
  1673. RecordMacro             Record keystrokes
  1674. PlayBack                Used in config file - play back keystrokes
  1675. SaveMacro               Save macro to a file
  1676. LoadMacro               Load macro from a file
  1677. ClearAllMacros          Clear the macro buffer
  1678. Pause                   Pause a macro
  1679. Quit                    Quit current window and file and abandon changes
  1680. NextDirtyLine           Move cursor to next dirty line, if it exists.
  1681. PrevDirtyLine           Move cursor to previous dirty line, if it exists.
  1682. FindRegX                Prompt for regular expression to find
  1683. RepeatFindRegX          Find next regular expression
  1684. RepeatFindRegXBackward  Find previous regular expression
  1685. DefineRegXGrep          Initialize grep function
  1686. PullDown                Pop-up Pull-down menu
  1687. IfCapsLock              Byrial Jensen's functions for language support.
  1688. IfNotCapsLock
  1689. ReadConfig              Read a config file  --  useful in Linux
  1690.